const db = wx.cloud.database();

/*
*  添加记录
	@params collection  集合名称
				  data				添加的数据，例：{name:"围城",author:"钱钟书"}
*/
function add({
	collection = "",
	data = {}
}) {
	return new Promise((resovle, reject) => {
		db.collection(collection).add({
			data,
			success: res => {
				resovle(res)
			},
			fail: err => {
				reject(err)
			}
		})
	})

}

/*
*  统计记录的数量
*   @params  collection   集合名称
						 where  			查询条件 {username:"张三",age:21}
		@retun   number
*/

function count({
	colleciton = "",
	where = {}
}) {
	return new Promise((resovle, reject) => {
		db.collection(colleciton).where(where).count({
			success: res => {
				resovle(res)
			},
			fail: err => {
				reject(err)
			}
		})
	})

}

/*
	获取1条记录
	@params colleciton  String  集合名称  例子：news
					id   记录id     例子：'321321ddsds'
*/


function getById({

	collection = "",
	id=""
}) {
	return new Promise((resolve, reject) => {
		db.collection(collection).doc(id).get({
			success:res=>{

				resolve(res)
			},
			fail:err=>{
				reject(err)
			}
		})
	})
}


/*
 *  获取所有记录
 *  @param 
 * 		collections string  集合名称   例子：news
 * 		where		 object  条件  		例子：{name:"张三"}
 * 		field		object   查询的字段  例子：{name:true,age:true}
 * 
 ** @return 
 * 			array  记录的数组  
 * **/
async function get({
	collection,
	where = {},
	field = {},
	skip = 0,
	limit = 20,
	orderBy = {
		field: "addtime",
		sort: "desc"
	}
}) {
	return new Promise((resolve, reject) => {
		db.collection(collection).where(where).field(field)
			.orderBy(orderBy.field, orderBy.sort)
			.skip(skip)
			.limit(limit)
			.get({
				success: res => {
					resolve(res)
				},
				reject: err => {
					reject(err)
				}
			})
	})
}


/*
* 根据id进行删除
* @params collection 集合名称
					 id					集合的id
*/
function removeById({
	collection = "",
	id = ""
}) {
	return new Promise((resolve, reject) => {
		db.collection(collection).doc(id).remove({
			success: res => {
				resolve(res)
			},
			fail: err => {
				reject(err)
			}
		})
	})

}

/*
* 批量删除
*/
function remove({colleciton="",where={}}){
	return new Promise((resolve,reject)=>{
		wx.cloud.callFunction({
			name:"remove",
			data:{
				colleciton,
				where
			},
			success:res=>{
				resolve(res)
			},
			fail:err=>{
				reject(err)
			}
		})
	})

}

/*
*更新某一条记录
*@params collection  集合名称
				 id						数据id
				 data					更改的字段 {name:"历史",type:2}
*/

function updateById({collection="",id="",data={}}){
	return new Promise((resolve,reject)=>{
		db.collection(collection).doc(id).update({
			data:data,
			success:res=>{
				resolve(res)
			},
			fail:err=>{
				reject(err)

			}
		})
	})
	
}


module.exports = {
	get,
	getById,
	add,
	count,
	removeById,
	remove,
	updateById
}